import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBCInsert {
    public static void main(String[] args) throws SQLException {

        Scanner scanner = new Scanner(System.in);

        //*************1、创建数据源***************

        //创建DataSourse对象，描述了数据库服务器在哪儿
        //Datasourse是JDBC自带的接口，MysqlDataSource是mysql驱动包里的，这里提供了一个实现DataSource接口的类
        //DataSource内置了 连接池，在频繁地创建/断开连接的时候，更加高效
        DataSource dataSource = new MysqlDataSource();//向上转型

        //设置数据库的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/schoolmessage?characterEncoding=utf8&useSSL=false");
        //设置登录数据库的用户名
        ((MysqlDataSource) dataSource).setUser("root");//向下转型
        //设置登录密码
        ((MysqlDataSource) dataSource).setPassword("123456");

        //以下写法导致代码中到处存在MysqlDataSource，如果一切换数据库就GG
//        MysqlDataSource dataSource = new MysqlDataSource();
//        dataSource.setURL();
//        dataSource.setUser();
//        dataSource.setPassword();



        //**************2、让代码和数据库服务器建立联系****************
        Connection connection = dataSource.getConnection();//getConnection可能会抛出异常，没有连接上数据库


        //2.5,通过用户手动输入数据再进行插入
        System.out.println("====输入你想要插入的所有数据====");
        System.out.println("1.请输入学号：");
        int id = scanner.nextInt();

        System.out.println("2.请输入姓名：");
        String name = scanner.next();

        System.out.println("3.请输入QQ号码：");
        int number = scanner.nextInt();

        System.out.println("4.请输入地址：");
        String address = scanner.next();

        System.out.println("5.请输入班级id：");
        int class_id = scanner.nextInt();


        //**************3、操作数据库******************
        //以插入数据为例，关键就是构造一个SQL语句
        //String sql = "insert into student values(209000815,'喜洋洋',22065250,'蓉园一号272',2);";
        //String sql = "delete from student where id = 209000815";

        String sql = "insert into student values(?,?,?,?,?)";//字段还不确定，先用 ? 占个位置
        PreparedStatement statement = connection.prepareStatement(sql);//将字符串类型风格的sql语句包装成一个JDBC语句对象

        //执行具体的替换动作
        statement.setInt(1,id);//将第一个问号替换成id，下面以此类推
        statement.setString(2,name);
        statement.setInt(3,number);
        statement.setString(4,address);
        statement.setInt(5,class_id);
        System.out.println("statement:" + statement);//将拼好的SQL打印出来，方便检查错误


        //**************4、执行SQL********************
        //SQL里面如果是insert，update，delete，都是使用 executeUpdate 方法
        //如果是 select，则使用executeQuery 方法
        int ret = statement.executeUpdate();//返回值，表示这个操作影响到了几行
        System.out.println("有" + ret + "行记录受到了影响！！！");


        //**************5、SQL执行完毕，释放资源**********
        //先释放statement 后释放connection
        statement.close();
        connection.close();
    }
}
